package com.chatmcp.mcprouter.jsonrpc;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * 工具类
 * 表示MCP协议中的工具
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Tool {

    /**
     * 工具名称
     */
    private String name;

    /**
     * 工具描述
     */
    private String description;

    /**
     * 输入模式
     */
    private ToolInputSchema inputSchema;

    /**
     * 工具输入模式类
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class ToolInputSchema {
        /**
         * 类型，通常为"object"
         */
        private String type;

        /**
         * 属性
         */
        private Map<String, Object> properties;

        /**
         * 必需属性列表
         */
        private List<String> required;

        /**
         * 标题
         */
        private String title;

        /**
         * 描述
         */
        private String description;
    }

    /**
     * 工具列表结果类
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class ListToolsResult {
        /**
         * 工具列表
         */
        private List<Tool> tools;
    }

    /**
     * 工具调用参数类
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class CallToolParams {
        /**
         * 工具名称
         */
        private String name;

        /**
         * 工具参数
         */
        private Map<String, Object> arguments;

        /**
         * 元数据
         */
        private Map<String, Object> metadata;
    }

    /**
     * 工具结果内容类
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class ToolResultContent {
        /**
         * 内容类型，text或image
         */
        private String type;

        /**
         * 文本内容
         */
        private String text;

        /**
         * 图像数据
         */
        private String data;

        /**
         * MIME类型
         */
        private String mimeType;
    }

    /**
     * 工具调用结果类
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class CallToolResult {
        /**
         * 结果内容列表
         */
        private List<ToolResultContent> content;

        /**
         * 是否错误
         */
        private Boolean isError;
    }
} 